package tablemodels;

import java.util.ArrayList;

import gui.MainFrame;

import javax.swing.table.DefaultTableModel;

/**
 * 
 * @author dernasherbrezon
 *
 */
public class ExpertCompetenceModel extends DefaultTableModel
{
	private ArrayList<String> header = new ArrayList<String>();
	public int[][]data;
	private MainFrame parent;
	
	public ExpertCompetenceModel(MainFrame parent)
	{
		this.parent = parent;
		header.add("Оцениваемые");
		//header = new String[parent.expertCriterions.size()];
		for(int i=0;i<parent.expertCriterions.size();i++)
		{
			header.add(String.valueOf(parent.expertCriterions.get(i).index));
		}
		
		data = new int[parent.expertCriterions.size()][parent.experts.size()];
	}
	
	@Override
	public void setValueAt(Object aValue, int row, int column)
	{
		data[column-1][row] = (Integer)aValue;
	}
	
	@Override
	public Object getValueAt(int row, int column)
	{
		if(column==0)
		{
			return parent.experts.get(row).name;
		}
		return data[column-1][row];
	}
	
	@Override
	public int getColumnCount()
	{
		if(header!=null)
		{
			return header.size();
		}
		return 0;
	}
	
	@Override
	public int getRowCount()
	{
		if(parent!=null)
		{
			return parent.experts.size();
		}
		return 0;
	}
	
	@Override
	public boolean isCellEditable(int row, int column)
	{
		if(column==0)
		{
			return false;
		}
		return true;
	}
	
	@Override
	public String getColumnName(int column)
	{
		return header.get(column);
	}
	
	@Override
	public void fireTableDataChanged()
	{
		super.fireTableDataChanged();
	}
	
	@Override
	public Class<?> getColumnClass(int columnIndex)
	{
		if(columnIndex==0)
		{
			return String.class;
		}
		return Integer.class;
	}
	
	public void checkCorrectValues() throws Exception
	{
		for(int i=0;i<getRowCount();i++)
		{
			checkForValue(i,0);
			checkForValue(i,1);
			checkForValue(i,2);
			checkForValue(i,3);
		}
	}
	
	private void checkForValue(int row, int value) throws Exception
	{
		int numRepeats = 0;
		for(int i=0;i<getColumnCount();i++)
		{
			if(data[row][i]==value)
			{
				numRepeats++;
			}
		}
		if(numRepeats==0)
		{
			throw new Exception("Значение \"" + value + "\" не присутствует в таблице");
		}
		if(numRepeats>1)
		{
			throw new Exception("Значение \"" + value + "\" указано больше одного раза");
		}
	}
}
